////////////////////////Chteau-Saint-Martin/////////////////////////////////////////////////

//                                                                 /////////////////////////

//  FileName    :  VMProtect 1.7 EDI,ESI & EBX Fixer               ////////////////////////

//  Features    :                                                  ///////////////////////

//                 Use this script to fix all mov register,direct  //////////////////////

//                 to mov register,dword ptr ds:[ADDRESS], API.    /////////////////////

//                                                                 ////////////////////

//                                                                 ///////////////////

//                 1. VMProtect 1.7 IAT Fix & LOG.txt              //////////////////

//                 2. IAT_LOGGER.txt                               /////////////////

//                 3. Use UIF                                      ////////////////

//                 3. VMProtect 1.7 EDI,ESI & EBX Fixer.txt        ///////////////

//                 4. INSTR_FIX.txt                                //////////////

//                 5. Dump & Fix                                   /////////////

//                                                                 ////////////

//                 HINT:Before you use the INSTR_FIX.txt you       ///////////

//                 should add a 0 before all - and + instructions  //////////

//                 like "MOV ECX,DWORD PTR SS:[EBP+0C]" so Olly    /////////

//                 cant asm [xxx+C] without a 0 before.           ////////

//                                                                 ///////

//                                                                 //////

//  Environment :  WinXP,OllyDbg V1.10,OllyScript v1.65.4          /////

//  Author      :  LCF-AT                                          ////

//  Date        :  2009-22-02                                      ///

//                                                                 //

//                                                                // 

///////////////WILLST DU SPAREN,DANN MUT DU SPAREN!///////////////



var B1

var B2

var B3

var IB

var IB2

var IATSECTION

var ED

var ED2

var ADDRESS

var ES

var EB



mov ED, "mov edi,DWORD PTR DS:"

mov ES, "mov esi,DWORD PTR DS:"

mov EB, "mov ebx,DWORD PTR DS:"



mov $RESULT, 0

ask "Enter the address VA of your new IAT section"

cmp $RESULT, 0

je endes2

mov IATSECTION, $RESULT       // New SEC search



gmi eip, CODEBASE

mov IB, $RESULT

mov IB2, $RESULT



///////////////////

R1:

find IB, #C7C7????????90#   // MOV EDI,const

cmp $RESULT, 0

je R2a



mov IB, $RESULT

add IB, 06

mov B1, $RESULT

add B1, 02

mov B2, [B1]



find IATSECTION, B2

cmp $RESULT, 0

jne R1a

pause

pause



R1a:

mov ADDRESS, $RESULT

sub B1, 02

eval "{ED}[{ADDRESS}]"

asm B1, $RESULT

jmp R1

///////////////////////

R2a:

mov IB, IB2



R2:

find IB, #C7C6????????90#   // MOV ESI,const

cmp $RESULT, 0

je R3a



mov IB, $RESULT

mov B1, $RESULT

add B1, 02

mov B2, [B1]



find IATSECTION, B2

cmp $RESULT, 0

jne R1b

pause

pause



R1b:

mov ADDRESS, $RESULT

sub B1, 02

eval "{ES}[{ADDRESS}]"

asm B1, $RESULT

jmp R2



////////////////////

R3a:

mov IB, IB2



R3:

find IB, #C7C3????????90#   // MOV EBX,const

cmp $RESULT, 0

je R4



mov IB, $RESULT

mov B1, $RESULT

add B1, 02

mov B2, [B1]



find IATSECTION, B2

cmp $RESULT, 0

jne R1c

pause

pause



R1c:

mov ADDRESS, $RESULT

sub B1, 02

eval "{EB}[{ADDRESS}]"

asm B1, $RESULT

jmp R3



R4:

endes:

msg "Fixing done"

pause

pause

endes2:

ret

msg "Nothing fixed!"

ret